package com.xmu.prcs.service;

import java.util.List;

import com.xmu.prcs.action.bean.KindKeBean;
import com.xmu.prcs.action.bean.KindShuBean;
import com.xmu.prcs.action.bean.PlantInfoBean;
import com.xmu.prcs.action.bean.PlantLocationBean;
import com.xmu.prcs.action.bean.SubjectBean;
import com.xmu.prcs.entity.KindKe;
import com.xmu.prcs.entity.KindShu;
import com.xmu.prcs.entity.Subject;
import com.xmu.prcs.util.PageBean;
import com.xmu.prcs.util.ResultBean;

/**
 * 植物信息管理
 * @author frequent
 * @version 1.0,2012-3-20
 *
 */
public interface PlantInfoManager {
	
	/**
	 * 增加植物
	 * @param plant
	 */
	public void addPlant(PlantInfoBean plant);
	
	/**
	 * 系统是否存在某个植物名
	 * @param name
	 * @return
	 */
	public boolean isPlantNameExist(String name);
	
	/**
	 * 系统是否存在某个植物学名
	 * @param name
	 * @return
	 */
	public boolean isScientificNameExist(String name);
	
	/**
	 * 得到所有的科分类
	 * @return
	 */
	public List<KindKeBean> getAllKindKe();
	
	/**
	 * 得到某个分类科下的所有分类属
	 * @param kindKe
	 * @return
	 */
	public List<KindShuBean> getKindShuByKindKe(String kindKe);

	/**
	 * 得到所有的专题名
	 * @return
	 */
	public List<SubjectBean> getAllSubjectName();
	
	/**
	 * 增加分类科
	 * @param idKind
	 * @return 系统中不存在此分类科就增加并返回true，存在就返回false
	 */
	public boolean addKindKe(String kindKe);
	
	/**
	 * 增加某个分类科下的分类属
	 * @param idKindKe
	 * @param kindShu
	 * @return 系统中不存在此分类属就增加并返回true，存在就返回false
	 */
	public boolean addKindShu(String idKindKe, String kindShu);
	
	/**
	 * 通过属性值找到分类科
	 * @param property
	 * @param param
	 * @return
	 */
	public KindKe getKindKeByProperty(Object param);
	
	/**
	 * 通过属性值找到分类属
	 * @param property
	 * @param param
	 * @return
	 */
	public KindShu getKindShuByProperty(Object param);
	
	/**
	 * 通过分页得到植物
	 * @param page
	 * @param idSubject
	 * @param idKindShu
	 * @param plantName
	 * @return
	 */
	public ResultBean getPlant4Page(PageBean page, String idSubject, String idKindShu, String plantName);
	
	/**
	 * 通过植物名得到该植物的详细信息
	 * @param name
	 * @return
	 */
	public PlantInfoBean getPlantByName(String name);
	
	/**
	 * 通过专题名得到专题
	 * @param name
	 * @return
	 */
	public Subject getSubjectByName(String name);
	
	/**
	 * 修改植物信息
	 * @param bean
	 * @return
	 */
	public boolean modifyPlant(PlantInfoBean bean);
	
	/**
	 * 删除植物
	 * @param plantName
	 * @return
	 */
	public boolean deletePlant(int idPlant);
	
	/**
	 * 收藏植物
	 * @param plantName
	 * @return
	 */
	public boolean collectPlant(int iduser, int idPlant);
	
	/**
	 * 按分页效果得到专题列表
	 * @param page
	 * @return
	 */
	public ResultBean getSubject4Page(PageBean page);
	
	/**
	 * 按分页效果得到专题下的植物列表
	 * @param idSubject
	 * @return
	 */
	public ResultBean getPlant4PageBySubject(int idSubject, PageBean page);
	
	/**
	 * 增加专题
	 * @param bean
	 * @return
	 */
	public boolean addSubject(SubjectBean bean);
	
	/**
	 * 通过id得到专题
	 * @param idSubject
	 * @return
	 */
	public SubjectBean getSubjectById(int idSubject);
	
	/**
	 * 修改专题
	 * @param bean
	 * @return
	 */
	public boolean modifySubject(SubjectBean bean);
	
	/**
	 * 按分页效果得到分类科
	 * @param page
	 * @param kindName
	 * @return
	 */
	public ResultBean getKindKe4Page(PageBean page, String kindName);
	
	/**
	 * 按分页效果得到分类科下的属分类
	 * @param page
	 * @param kindName
	 * @param idKindKe
	 * @return
	 */
	public ResultBean getKindShu4Page(PageBean page, String kindName, String idKindKe);
	
	/**
	 * 得到植物部分信息和地理位置的集合
	 * @return
	 */
	public List<PlantLocationBean> getPlantAndLocation();
	
	/**
	 * 删除某个专题
	 * @param idSubject
	 * @return
	 */
	public boolean deleteSubject(String idSubject);
	
	/**
	 * 检查某个专题名是否已存在，对于修改专题时的专题名要排除欲修改的专题名
	 * @param subjectName
	 * @param idSubject
	 * @return
	 */
	public boolean isSubjectNameExist(String subjectName, int idSubject);
	
	/**
	 * 删除分类科
	 * @param kind
	 * @return
	 */
	public boolean deleteKindKe(int kind);
	
	/**
	 * 删除分类属
	 * @param kind
	 * @return
	 */
	public boolean deleteKindShu(int kind);
	
	/**
	 * 得到用于主页滑动展示的职务信息
	 * @return
	 */
	public List<PlantInfoBean> getPlants4Index();
	
}
